home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / comm2 / mmmltc80.lha / REXX / MM_MultiAction.rexx
OS/2 REXX Batch file  |  1996-04-26  |  8KB  |  251 lines

  1. /*
  2. ** $VER: MM_MultiAction 0.80 (11.04.96)
  3. **
  4. ** Written by Paolo Carotenuto
  5. **
  6. */
  7. OPTIONS RESULTS
  8. IF ~SHOW('l',"rexxsupport.library") THEN;DO
  9. IF ~ADDLIB("rexxsupport.library",0,-30,0) THEN;DO
  10. SAY "Could not open RexxSupport.library"
  11. EXIT 10
  12. END
  13. END
  14. DROP MM.
  15. ADDRESS 'MAILMANAGER'
  16. MM.PathCfg='MM:Config/'
  17. MM.LogLevel=2
  18. MM.PrgName='MM_MultiAction v0.80'
  19. CALL WriteLog(MM.PrgName '- Started')
  20. MM_ReadStem MM.PathCfg||'MM_MultiAction.Cfg' Config
  21. IF Rc ~=0 THEN;DO
  22. CALL WriteLog('*** Error: Can not open config "'MM.PathCfg'MM_MultiAction.cfg"')
  23. EXIT 10
  24. END
  25. MM.Day=0
  26. MM.Command.Count=0
  27. DO l=0 FOR Config.Count
  28. Line=STRIP(Config.l)
  29. IF (LEFT(Line,1) ~=';')&Line ~='' THEN;DO
  30. IF UPPER(WORD(Line,1))='DAY' THEN;DO
  31. Week=UPPER(DATE('W'))
  32. SELECT
  33. WHEN Week='SUNDAY' THEN MM.Day=0
  34. WHEN Week='MONDAY' THEN MM.Day=1
  35. WHEN Week='TUESDAY' THEN MM.Day=2
  36. WHEN Week='WEDNESDAY' THEN MM.Day=3
  37. WHEN Week='THURSDAY' THEN MM.Day=4
  38. WHEN Week='FRIDAY' THEN MM.Day=5
  39. WHEN Week='SATURDAY' THEN MM.Day=6
  40. OTHERWISE CALL WriteLog('Wrong DAY to Process this sequences!!')
  41. END
  42. IF POS(MM.Day,SUBWORD(Line,2))=0 THEN MM.Day=FALSE
  43. ITERATE
  44. END
  45. IF UPPER(WORD(Line,1))='FOUND' THEN;DO
  46. MM.Found=WORD(Line,2)
  47. CALL WriteLog('Trying to find ['UPPER(MM.Found)']')
  48. ITERATE
  49. END
  50. IF UPPER(Line) ~='END' THEN MM_AddToStem MM.Command 'Line'
  51. IF UPPER(WORD(Line,1))='END' THEN CALL Process()
  52. END
  53. END
  54. CALL WriteLog(MM.PrgName '- Ended')
  55. EXIT
  56. Process:PROCEDURE EXPOSE MM.
  57. IF MM.Day ~=FALSE THEN;DO
  58. IF Found(MM.Found) ~=FALSE THEN;DO
  59. DO l=0 FOR MM.Files.Count
  60. CALL WriteLog('  Actually found ['MM.Files.l']')
  61. MM.Nome=MM.Files.l
  62. MM.Patt=MM.Path||MM.Files.l
  63. MM.Size=WORD(STATEF(MM.Patt),2)
  64. DO i=0 FOR MM.Command.Count
  65. SELECT
  66. WHEN UPPER(WORD(MM.Command.i,1))='IFSIZE' THEN;DO
  67. IF IfSize(MM.Files.l,SUBWORD(MM.Command.i,2))=FALSE THEN LEAVE
  68. END
  69. WHEN UPPER(WORD(MM.Command.i,1))='CHECKDATE' THEN;DO
  70. IF CheckDate(MM.Files.l,SUBWORD(MM.Command.i,2))=FALSE THEN LEAVE
  71. END
  72. WHEN UPPER(WORD(MM.Command.i,1))='COMMENT' THEN CALL Comment(MM.Files.l,SUBWORD(MM.Command.i,2))
  73. WHEN UPPER(WORD(MM.Command.i,1))='DELETE' THEN CALL Delete(MM.Files.l)
  74. WHEN UPPER(WORD(MM.Command.i,1))='RENAME' THEN CALL Rename(MM.Files.l,SUBWORD(MM.Command.i,2))
  75. WHEN UPPER(WORD(MM.Command.i,1))='COPY' THEN CALL Copy(MM.Files.l,SUBWORD(MM.Command.i,2))
  76. WHEN UPPER(WORD(MM.Command.i,1))='MOVE' THEN CALL Move(MM.Files.l,SUBWORD(MM.Command.i,2))
  77. WHEN UPPER(WORD(MM.Command.i,1))='NOTIFY' THEN CALL Notify(SUBWORD(MM.Command.i,2))
  78. WHEN UPPER(WORD(MM.Command.i,1))='HATCH' THEN CALL Hatch(MM.Files.l,SUBWORD(MM.Command.i,2))
  79. WHEN UPPER(WORD(MM.Command.i,1))='EVENTLOG' THEN CALL EventLog(SUBWORD(MM.Command.i,2))
  80. WHEN UPPER(WORD(MM.Command.i,1))='SCRIPT' THEN CALL Script(SUBWORD(MM.Command.i,2))
  81. WHEN UPPER(WORD(MM.Command.i,1))='CLICMD' THEN CALL CliCmd(SUBWORD(MM.Command.i,2))
  82. OTHERWISE CALL WriteLog('  I don`t understand the command ['UPPER(WORD(MM.Command.i,1))']')
  83. END
  84. END
  85. END
  86. END
  87. END
  88. ELSE CALL WriteLog('  Wrong day to process this...')
  89. CALL WriteLog('Ending...')
  90. MM.Command.Count=0
  91. RETURN
  92. Found:PROCEDURE EXPOSE MM.
  93. PARSE ARG Command
  94. MM.AllFiles.Count=0
  95. Pos1=0
  96. pos2=0
  97. Pos1=LastPos('/',command)
  98. Pos2=LastPos(':',command)
  99. IF pos1=0 THEN;DO
  100. Progs=RIGHT(command,length(command)-pos2)
  101. Command=LEFT(Command,pos2)
  102. END
  103. ELSE;DO
  104. Progs=RIGHT(command,length(command)-pos1)
  105. Command=LEFT(Command,pos1)
  106. END
  107. ScanFiles=UPPER(SHOWDIR(command,'F','*'))
  108. IF ScanFiles ~='' THEN;DO
  109. DO WHILE ScanFiles ~=''
  110. PARSE VAR ScanFiles Programma '*' ScanFiles
  111. MM_AddToStem MM.AllFiles 'Programma'
  112. END
  113. MM_SearchInStem MM.AllFiles MM.Files Progs STR
  114. IF MM.Files.Count>0 THEN;DO
  115. MM.Path=Command
  116. MM.Date=LEFT(LogData(),14)
  117. MM.Time=LEFT(time(),5)
  118. MM.DtTm=LogData()
  119. MM_SortStem MM.Files
  120. RETURN TRUE
  121. END
  122. END
  123. CALL WriteLog('  Nothing!')
  124. RETURN FALSE
  125. IfSize:PROCEDURE EXPOSE MM.
  126. PARSE ARG Progs,Size
  127. IF WORD(STATEF(MM.Path||Progs),2)>Size THEN;DO
  128. CALL WriteLog('  Size of file ['MM.Path||Progs'] is acceptable for Processing')
  129. RETURN TRUE
  130. END
  131. CALL WriteLog('  Size of file ['MM.Path||Progs'] is less than threshold - Aborting')
  132. RETURN FALSE
  133. Comment:PROCEDURE EXPOSE MM.
  134. PARSE ARG Progs,Testo
  135. CALL WriteLog('  Setting comment on ['MM.Path||Progs']')
  136. Testo=Trasforma(Testo)
  137. MM_SetFileNote MM.Path||Progs 'Testo'
  138. RETURN
  139. CheckDate:PROCEDURE EXPOSE MM.
  140. PARSE ARG Progs, Day .
  141. DayProg=( DATE('I')-WORD(STATEF(MM.Path||Progs),5))
  142. IF DayProg> Day THEN;DO
  143. CALL WriteLog('  Excepted day limit of file ['MM.Path||Progs'] Processing...')
  144. RETURN TRUE
  145. END
  146. RETURN FALSE
  147. Delete:PROCEDURE EXPOSE MM.
  148. PARSE ARG Progs
  149. CALL WriteLog('  Deleting file ['MM.Path||Progs']')
  150. MM_DeleteFile MM.Path||Progs
  151. RETURN
  152. Rename:PROCEDURE EXPOSE MM.
  153. PARSE ARG Progs, Dest
  154. IF INDEX(Dest,':')=0|INDEX(Dest,':')=0 THEN NewDest=MM.Path||STRIP(Dest)
  155. ELSE NewDest= Dest
  156. IF RIGHT(Dest,1)=':'|RIGHT(Dest,1)='/' THEN NewDest= Dest||Progs
  157. CALL WriteLog('  Renaming ['MM.Path||Progs'] to ['STRIP(NewDest)']')
  158. MM_MoveFile MM.Path||Progs NewDest
  159. RETURN
  160. Copy:PROCEDURE EXPOSE MM.
  161. PARSE ARG Progs, Dest
  162. NewDest= Dest
  163. IF RIGHT(Dest,1)=':'|RIGHT(Dest,1)='/' THEN NewDest= Dest||Progs
  164. CALL WriteLog('  Copying ['MM.Path||Progs'] to ['STRIP(NewDest)']')
  165. MM_CopyFile MM.Path||Progs NewDest
  166. RETURN
  167. Move:PROCEDURE EXPOSE MM.
  168. PARSE ARG Progs, Dest
  169. NewDest= Dest
  170. IF RIGHT(Dest,1)=':'|RIGHT(Dest,1)='/' THEN NewDest= Dest||Progs
  171. CALL WriteLog('  Moving ['MM.Path||Progs'] to ['STRIP(NewDest)']')
  172. MM_MoveFile MM.Path||Progs NewDest
  173. RETURN
  174. Hatch:PROCEDURE EXPOSE MM.
  175. PARSE ARG Progs,TagName Altro
  176. Repla=''
  177. Altro=STRIP(Altro)
  178. IF RIGHT(Altro,1) ~='"' THEN;DO
  179. Descr=TRANSLATE(LEFT(Altro,LASTPOS('"',Altro)),' ','"')
  180. Repla=RIGHT(Altro,LENGTH(Altro)-LASTPOS(' ',Altro))
  181. END
  182. Hatch.File=MM.Path||Progs
  183. Hatch.Desc=STRIP(Descr)
  184. Hatch.Repl=STRIP(Repla)
  185. CALL WriteLog('  Hatching file ['MM.Path||Progs'] into area ['TagName']')
  186. MM_HatchTick TagName Hatch
  187. RETURN
  188. Notify:PROCEDURE EXPOSE MM.
  189. PARSE ARG TagName User Message
  190. MM_GetAreaInfo TagName Info
  191. Mess.FromAddr=Info.Addr
  192. Mess.From=MM.PrgName
  193. Mess.ToAddr=Info.Addr
  194. Mess.To=TRANSLATE(User,' ','_')
  195. Mess.Subj='MM_Robotic Notification'
  196. Mess.Flags='PVT'
  197. Mess.File='T:MM.Trans'
  198. MM.Body.Count=0
  199. CALL AddLine(Trasforma(STRIP(TRANSLATE(Message,' ','"'))))
  200. CALL AddLine('')
  201. MM_WriteStem 'T:MM.Trans' MM.Body
  202. CALL WriteLog('  Notifying to ['User'] into area ['TagName']')
  203. MM_WriteMsg TagName Mess
  204. RETURN
  205. EventLog:PROCEDURE EXPOSE MM.
  206. PARSE ARG Name Message
  207. CALL WriteLog('  Write to EVENT.Log of ['TRANSLATE(Name,' ','_')']')
  208. ADDRESS COMMAND 'Echo '||MM.DtTm':' Trasforma(Message)||' >>User:'||Name'/'||Event.log
  209. RETURN
  210. Script:PROCEDURE EXPOSE MM.
  211. PARSE ARG Script
  212. CALL WriteLog('  Executing ['Trasforma(Script)'] script')
  213. ADDRESS COMMAND 'Execute >NIL: 'Trasforma(Script)
  214. RETURN
  215. CliCmd:PROCEDURE EXPOSE MM.
  216. PARSE ARG Cmd
  217. CALL WriteLog('  Executing ['Trasforma(Cmd)'] Cli Command')
  218. ADDRESS COMMAND Trasforma(Cmd)' >NIL:'
  219. RETURN
  220. Replace:PROCEDURE
  221. PARSE ARG String,New,Old
  222. DO WHILE INDEX(String,Old) ~=0
  223. INTERPRET "PARSE VAR String l '"Old"' r"
  224. String=l||New||r
  225. END
  226. RETURN String
  227. Trasforma:PROCEDURE EXPOSE MM.
  228. PARSE ARG String
  229. IF INDEX(String,'%')=0 THEN RETURN String
  230. String=Replace(String,MM.Nome,'%NAME')
  231. String=Replace(String,MM.Patt,'%PATH')
  232. String=Replace(String,MM.Size,'%SIZE')
  233. String=Replace(String,MM.Date,'%DATE')
  234. String=Replace(String,MM.Time,'%TIME')
  235. String=Replace(String,MM.DtTm,'%DTTM')
  236. RETURN String
  237. LogData:PROCEDURE EXPOSE MM.
  238. Tempo= DATE()
  239. Week=LEFT(date('W'),3)
  240. PARSE VAR Tempo Giorno Mese Anno
  241. RETURN Week giorno mese RIGHT(anno,2) LEFT(time(),5)
  242. AddLine:PROCEDURE EXPOSE MM.
  243. PARSE ARG Line
  244. Cont=MM.Body.Count
  245. MM.Body.Cont=Line
  246. MM.Body.Count=Cont+1
  247. RETURN
  248. WriteLog:PROCEDURE EXPOSE MM.
  249. PARSE ARG Testo
  250. MM_WriteLog 'Testo' MM.LogLevel
  251. RETURN